#ifndef UC_BRTRAV_H
#define UC_BRTRAV_H 1

#include "zadesk.h"
#include "zrxobject.h"
#include "zrxboiler.h"
#include "ucbrgbl.h"


// forward class declarations
class UcBrTraverserImp;
class UcBrTraverserData;


class DllImpExp UcBrTraverser : public UcRxObject
{
public:
    UCRX_DECLARE_MEMBERS(UcBrTraverser);
    virtual ~UcBrTraverser();
    
    // Equivalence                    
    ZSoft::Boolean      isEqualTo       (const UcRxObject* other) const;
                        
    // Queries & Initialisers
    ZSoft::Boolean      isNull          () const;

    // Topological traversal
    ZSoft::Boolean      done            () const;
    UcBr::ErrorStatus   next            ();
    UcBr::ErrorStatus   restart         ();

	// Validation
	UcBr::ErrorStatus	setValidationLevel(const UcBr::ValidationLevel& = *(UcBr::ValidationLevel*)NULL);
	UcBr::ErrorStatus	getValidationLevel(UcBr::ValidationLevel& validationLevel) const;
	ZSoft::Boolean		brepChanged		() const;

    // Queries & Initialisers
	// (Note: obsolete function)
	UcBr::ErrorStatus	set				(UcBrTraverserData* traverserData);
	UcBr::ErrorStatus	get				(UcBrTraverserData*& traverserData) const;

protected:
    UcBrTraverser();
    UcBrTraverser(const UcBrTraverser& src);
    UcBrTraverser&      operator =      (const UcBrTraverser& src);

    UcBrTraverserImp*   mpImp;
};


#endif

